package com.glodon.ggzy.core.utils;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * properties文件读写操作工具类 
 * @author yangjf
 * @date 2013/01/11
 */
public class PropertiesUtil {

	//属性文件路径  
	private static String propertiesPath;

	//日志
	private static Logger logger = LoggerFactory.getLogger(PropertiesUtil.class);
	
//	private static long lastModifyTime =0;
	
//	private static Properties properties = new Properties();


	/**
	 * 
	 * 根据主键key读取主键的值value 
	 * @param key:键 
	 * @param filePath:属性文件路径 
	 */
	public static String readValue(String propertiesPath, String key) {
		
		Properties properties = new Properties();
		try {
			InputStream is = new BufferedInputStream(new FileInputStream(propertiesPath));
			properties.load(is);
			String value = properties.getProperty(key);
			is.close();
			return value;
		} catch (Exception e) {
			logger.error("读取配置文件键值发生错误！", e);
			return null;
		}
	}

//	/**
//	 * 根据主键key读取主键的值value 
//	 * @param key:键 
//	 * @return
//	 */
//	public static String readValue(String key) {
//		try {
//			ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
//			URL url = contextClassLoader.getResource("/resources/sso.properties");
//			File file = new File(url.getFile());
//			System.err.println("打印路径");
//			System.err.println(PropertiesUtil.class.getClassLoader());
//			System.err.println(key);
//			System.err.println(url.getFile());
//			
//			if(lastModifyTime != file.lastModified()){
//				lastModifyTime  = file.lastModified();
//				InputStream is = new BufferedInputStream( contextClassLoader.getResourceAsStream("/resources/sso.properties"));
//				properties.load(is);
//				is.close();
//			}
//			String value = properties.getProperty(key);
//			
//			System.err.println(properties.toString());
//			
//			return value;
//		} catch (Exception e) {
//			logger.error("读取配置文件键值发生错误！", e);
//			return null;
//		}
//	}

	/**
	 * 
	 * 更新（或插入）一对properties信息(主键及其键值) 
	 * 如果该主键已经存在，更新该主键的值； 
	 * 如果该主键不存在，则插件一对键值。 
	 * @param keyName:键名 
	 * @param keyValue:键值 
	 */
	public static void writeProperties(String keyName, String keyValue) {
		try {
			// 调用 HashTable 的方法 put，使用 getProperty 方法提供并行性。  
			// 强制要求为属性的键和值使用字符串。返回值是 HashTable 调用 put 的结果。  
			//读配置文件路径  
			Properties properties = new Properties();
			properties.load(new FileInputStream(propertiesPath));
			OutputStream os = new FileOutputStream(propertiesPath);
			properties.setProperty(keyName, keyValue);
			// 以适合使用 load 方法加载到 Properties 表中的格式，  
			// 将此 Properties 表中的属性列表（键和元素对）写入输出流  
			properties.store(os, "Update '" + keyName + "' value");
			os.close();
		} catch (FileNotFoundException e) {
			logger.error("配置文件路径没有找到！", e);
		} catch (IOException e) {
			logger.error("属性文件更新错误", e);
		} finally {

		}
	}

//	public static void main(String[] args) {
//		System.out.println("readValue==" + readValue("id"));
//		writeProperties("id", "5");
//		System.out.println("readValue==" + readValue("id"));
//		System.out.println("更新配置文件成功！");
//	}

}
